#ifndef __BE_TRACK__
#define __BE_TRACK__

class Track //: public ScriptableObject<Track>
{
 protected:
  Turple3f currValue;
  UINT64   duration;
  Track();
  
 public:
  void update(const UINT64 &_time);
  const Turple3f& getValue() const;
  void setDuration(const UINT64 &_dur);
  virtual void setLoop(const bool &_loop) = 0;
  virtual void setStartEndTime(const UINT64 &_start, const UINT64 &_end) = 0;
  virtual void start(const UINT64 &_time) = 0;
  virtual void internalUpdate(const UINT64 &_time) = 0;
  virtual ~Track();
};

class CircularTrack : public Track
{
 private:
  float radius;
  LinearInterpolator<Turple1f> angle;

 public:
  CircularTrack();
  ~CircularTrack();

  void internalUpdate(const UINT64 &_time);
  void setLoop(const bool &_loop);
  void setStartEndTime(const UINT64 &_start, const UINT64 &_end);
  void start(const UINT64 &_time);
  void setRadius(float _radius);
};

#endif
